package ar.com.arkios.kfcon4d.dao;

import ar.com.arkios.kfcon4d.util.EstructuraUtil;
import ar.com.arkios.kfcon4d.util.RegisterBuilder;
import ar.com.arkios.kfconmodelo.modelo.Variedad;
import ar.com.arkios.j4d.opDataArray;
import java.util.List;
import org.apache.log4j.Logger;

/**
 * 
 */
public class VariedadDAO extends GenericDAO<Variedad> {

    private static final Logger miLogger = Logger.getLogger(VariedadDAO.class);
    
    /** Nombre de la tabla Variedades */
    private static final String VARIEDADES = "Variedades";
    
    /** Nombre de la tabla VariedadesAtributos */
    private static final String VARIEDADES_ATTR = "VariedadesAtributos";
    
    // Columnas de la tabla Variedades
    private static final String VARIEDADES_ESPECIE = "Especie";
    private static final String VARIEDADES_COD = "Cod";
    private static final String VARIEDADES_DESCRIPCION = "Descripcion";
    
    // Columnas de la tabla VariedadesAtributos
    private static final String VARIEDADES_ATTR_VARIEDAD = "Variedad";
    private static final String VARIEDADES_ATTR_ENTE = "Ente";
    private static final String VARIEDADES_ATTR_AT1 = "Atributo1";
    private static final String VARIEDADES_ATTR_AT2 = "Atributo2";
    
    /** Nombres de las columnas a ser utilizadas de la tabla Variedades. */
    private static final String[] VARIEDADES_COLUMNAS = {VARIEDADES_ESPECIE, VARIEDADES_COD, VARIEDADES_DESCRIPCION};
    
    /** Nombres de las columnas a ser utilizada como PK de Variedades. */
    private static final String[] VARIEDADES_PK = {VARIEDADES_COD};
    
    /** Nombres de las columnas a ser utilizadas de la tabla VariedadesAtributos. */
    private static final String[] VARIEDADES_ATTR_COLUMNAS = {VARIEDADES_ATTR_VARIEDAD, VARIEDADES_ATTR_ENTE, VARIEDADES_ATTR_AT1, VARIEDADES_ATTR_AT2};

    /** Nombres de las columnas a ser utilizada como PK de VariedadesAtributos. */
    private static final String[] VARIEDADES_ATTR_PK = {VARIEDADES_ATTR_VARIEDAD};

    @Override
    protected String getEntidadTableName() {
        return VARIEDADES;
    }

    @Override
    protected String getEntidadAtributoTableName() {
        return VARIEDADES_ATTR;
    }

    @Override
    protected String getPKProperty() {
        return "miCodigo";
    }

    @Override
    protected opDataArray[] mapListEntidadTo4D(List<Variedad> laLista) {
        opDataArray[] losDatosVariedades = new opDataArray[getMiEntidadFields().mSize];

        for (int i = 0; i < losDatosVariedades.length; i++) {
            losDatosVariedades[i] = new opDataArray(laLista.size());
        }

        int i = 0;
        for (Variedad variedad : laLista) {            
            RegisterBuilder variedadRegisterBuilder = new RegisterBuilder(getMiEntidadFields());
            variedadRegisterBuilder.setData(VARIEDADES_COD, variedad.getMiCodigo());
            variedadRegisterBuilder.setData(VARIEDADES_ESPECIE, variedad.getMiEspecieCodigo());
            variedadRegisterBuilder.setData(VARIEDADES_DESCRIPCION, variedad.getMiDescripcion());
            
            opDataArray dataAux = variedadRegisterBuilder.getDataArray();
            for (int j = 0; j < getMiEntidadFields().mSize; j++) {
               losDatosVariedades[j].mDataArray[i] = dataAux.mDataArray[j];
            }
            i += 1;
        }
        return losDatosVariedades;
    }

    @Override
    protected opDataArray[] mapListEntidadAtributosTo4D(List<Variedad> laLista) {
        opDataArray[] losDatosVariedadesAtributos = new opDataArray[getMiEntidadAtributosFields().mSize];

        for (int i = 0; i < losDatosVariedadesAtributos.length; i++) {
            losDatosVariedadesAtributos[i] = new opDataArray(laLista.size());
        }

        int i = 0;
        for (Variedad variedad : laLista) {            
            RegisterBuilder variedadesAtributosRegisterBuilder = new RegisterBuilder(getMiEntidadAtributosFields());
            variedadesAtributosRegisterBuilder.setData(VARIEDADES_ATTR_VARIEDAD, variedad.getMiCodigo());
            variedadesAtributosRegisterBuilder.setData(VARIEDADES_ATTR_ENTE, EstructuraUtil.SAP);
            variedadesAtributosRegisterBuilder.setData(VARIEDADES_ATTR_AT1, variedad.getMiDescVariedad1());
            variedadesAtributosRegisterBuilder.setData(VARIEDADES_ATTR_AT2, variedad.getMiDescpcionVariedad2());
            
            opDataArray dataAux = variedadesAtributosRegisterBuilder.getDataArray();
            for (int j = 0; j < getMiEntidadAtributosFields().mSize; j++) {
               losDatosVariedadesAtributos[j].mDataArray[i] = dataAux.mDataArray[j];
            }
            i += 1;
        }
        return losDatosVariedadesAtributos;
    }
    
    @Override
    protected String[] getEntidadFieldsNames(){
        return VARIEDADES_COLUMNAS;
    }
    
    @Override
    protected String[] getEntidadAtributosFieldsNames() {
        return VARIEDADES_ATTR_COLUMNAS;
    }
    
    @Override
    protected String[] getEntidadPKFieldsNames(){
        return VARIEDADES_PK;
    }
    
    @Override
    protected String[] getEntidadAtributosPKFieldsNames() {
        return VARIEDADES_ATTR_PK;
    }
    
}
